#Boa:Dialog:Altaproductos

import wx
import wx.lib.masked.timectrl
import wx.lib.masked.textctrl
import wx.lib.stattext
import wx.lib.masked.numctrl
import wx.lib.intctrl
import wx.grid
import consultasBD
import sincronizar_tabla  
import utiles

def create(parent):
    return Altaproductos(parent)

[wxID_ALTAPRODUCTOS, wxID_ALTAPRODUCTOSANIO, wxID_ALTAPRODUCTOSBUTTON2, 
 wxID_ALTAPRODUCTOSCODSUSSAN, wxID_ALTAPRODUCTOSDESCRI, 
 wxID_ALTAPRODUCTOSESTACION, wxID_ALTAPRODUCTOSGENSTATICTEXT1, 
 wxID_ALTAPRODUCTOSGENSTATICTEXT3, wxID_ALTAPRODUCTOSGRUPO, 
 wxID_ALTAPRODUCTOSINCODPRODUCTO, wxID_ALTAPRODUCTOSINCODPROVEE, 
 wxID_ALTAPRODUCTOSINNOMBREPROVEE, wxID_ALTAPRODUCTOSINPARAMETRO, 
 wxID_ALTAPRODUCTOSPCOMPRA, wxID_ALTAPRODUCTOSPVENTA, 
 wxID_ALTAPRODUCTOSPVENTA2, wxID_ALTAPRODUCTOSSTATICLINE1, 
 wxID_ALTAPRODUCTOSSTATICTEXT1, wxID_ALTAPRODUCTOSSTATICTEXT10, 
 wxID_ALTAPRODUCTOSSTATICTEXT2, wxID_ALTAPRODUCTOSSTATICTEXT3, 
 wxID_ALTAPRODUCTOSSTATICTEXT4, wxID_ALTAPRODUCTOSSTATICTEXT5, 
 wxID_ALTAPRODUCTOSSTATICTEXT6, wxID_ALTAPRODUCTOSSTATICTEXT8, 
 wxID_ALTAPRODUCTOSSTATICTEXT9, 
] = [wx.NewId() for _init_ctrls in range(26)]

class Altaproductos(wx.Dialog):
    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Dialog.__init__(self, id=wxID_ALTAPRODUCTOS, name='Altaproductos',
              parent=prnt, pos=wx.Point(375, 121), size=wx.Size(648, 254),
              style=wx.DEFAULT_DIALOG_STYLE, title='Altaproductos')
        self.SetClientSize(wx.Size(632, 218))

        self.staticText1 = wx.StaticText(id=wxID_ALTAPRODUCTOSSTATICTEXT1,
              label='Codigo Art. Proveedor:', name='staticText1', parent=self,
              pos=wx.Point(8, 40), size=wx.Size(113, 13), style=0)

        self.incodproducto = wx.TextCtrl(id=wxID_ALTAPRODUCTOSINCODPRODUCTO,
              name='incodproducto', parent=self, pos=wx.Point(160, 40),
              size=wx.Size(280, 21), style=0, value='')
        self.incodproducto.SetEditable(False)
        self.incodproducto.Enable(False)

        self.staticText2 = wx.StaticText(id=wxID_ALTAPRODUCTOSSTATICTEXT2,
              label='Proveedor:', name='staticText2', parent=self,
              pos=wx.Point(8, 8), size=wx.Size(55, 13), style=0)

        self.innombreprovee = wx.TextCtrl(id=wxID_ALTAPRODUCTOSINNOMBREPROVEE,
              name='innombreprovee', parent=self, pos=wx.Point(288, 8),
              size=wx.Size(100, 21), style=0, value='')
        self.innombreprovee.SetEditable(False)
        self.innombreprovee.Enable(False)

        self.staticText3 = wx.StaticText(id=wxID_ALTAPRODUCTOSSTATICTEXT3,
              label='Codigo Art. Sussan:', name='staticText3', parent=self,
              pos=wx.Point(24, 72), size=wx.Size(97, 13), style=0)

        self.codsussan = wx.TextCtrl(id=wxID_ALTAPRODUCTOSCODSUSSAN,
              name='codsussan', parent=self, pos=wx.Point(160, 72),
              size=wx.Size(100, 21), style=0, value='')
        self.codsussan.SetFont(wx.Font(10, wx.SWISS, wx.NORMAL, wx.BOLD, False,
              'Tahoma'))
        self.codsussan.SetEditable(False)
        self.codsussan.Enable(False)

        self.staticText4 = wx.StaticText(id=wxID_ALTAPRODUCTOSSTATICTEXT4,
              label=u'A\xf1o:', name='staticText4', parent=self,
              pos=wx.Point(296, 72), size=wx.Size(24, 13), style=0)

        self.staticText5 = wx.StaticText(id=wxID_ALTAPRODUCTOSSTATICTEXT5,
              label='Grupo:', name='staticText5', parent=self, pos=wx.Point(280,
              104), size=wx.Size(34, 13), style=0)

        self.staticText6 = wx.StaticText(id=wxID_ALTAPRODUCTOSSTATICTEXT6,
              label='Estacion:', name='staticText6', parent=self,
              pos=wx.Point(464, 104), size=wx.Size(45, 13), style=0)

        self.grupo = wx.ComboBox(choices=[], id=wxID_ALTAPRODUCTOSGRUPO,
              name='grupo', parent=self, pos=wx.Point(320, 104),
              size=wx.Size(130, 21), style=0, value='')
        self.grupo.SetLabel('')

        self.anio = wx.ComboBox(choices=["2008", "2009", "2010"],
              id=wxID_ALTAPRODUCTOSANIO, name='anio', parent=self,
              pos=wx.Point(320, 72), size=wx.Size(56, 21), style=0,
              value='2008')
        self.anio.SetLabel('2008')

        self.estacion = wx.ComboBox(choices=["Verano", "Primavera", "Otono",
              "Invierno"], id=wxID_ALTAPRODUCTOSESTACION, name='estacion',
              parent=self, pos=wx.Point(512, 104), size=wx.Size(72, 21),
              style=0, value='Verano')
        self.estacion.SetLabel('Verano')

        self.staticText8 = wx.StaticText(id=wxID_ALTAPRODUCTOSSTATICTEXT8,
              label='Precio Costo:', name='staticText8', parent=self,
              pos=wx.Point(8, 136), size=wx.Size(65, 13), style=0)

        self.pcompra = wx.lib.masked.numctrl.NumCtrl(id=wxID_ALTAPRODUCTOSPCOMPRA,
              name='pcompra', parent=self, pos=wx.Point(80, 133),
              size=wx.Size(78, 22), style=wx.TE_LEFT, value=0)
        self.pcompra.SetGroupChar(',')
        self.pcompra.SetDecimalChar('.')
        self.pcompra.SetFractionWidth(2)
        self.pcompra.SetDescription('')
        self.pcompra.SetDefaultValue('')
        self.pcompra.SetInsertionPoint(5)
        self.pcompra.SetHelpText('')
        self.pcompra.SetIntegerWidth(5)
        self.pcompra.Bind(wx.EVT_KILL_FOCUS, self.OnPcompraKillFocus)

        self.genStaticText1 = wx.lib.stattext.GenStaticText(ID=wxID_ALTAPRODUCTOSGENSTATICTEXT1,
              label='Precio Venta Lista 1:', name='genStaticText1', parent=self,
              pos=wx.Point(192, 136), size=wx.Size(99, 13), style=0)

        self.genStaticText3 = wx.lib.stattext.GenStaticText(ID=wxID_ALTAPRODUCTOSGENSTATICTEXT3,
              label='Cod:', name='genStaticText3', parent=self, pos=wx.Point(96,
              8), size=wx.Size(24, 13), style=0)

        self.button2 = wx.Button(id=wxID_ALTAPRODUCTOSBUTTON2,
              label='Guardar Articulo ', name='button2', parent=self,
              pos=wx.Point(256, 168), size=wx.Size(96, 32), style=0)
        self.button2.Bind(wx.EVT_BUTTON, self.OnButtonGuardarArticulo,
              id=wxID_ALTAPRODUCTOSBUTTON2)

        self.staticText9 = wx.StaticText(id=wxID_ALTAPRODUCTOSSTATICTEXT9,
              label=u'Descripci\xf3n:', name='staticText9', parent=self,
              pos=wx.Point(8, 104), size=wx.Size(59, 13), style=0)

        self.descri = wx.TextCtrl(id=wxID_ALTAPRODUCTOSDESCRI, name='descri',
              parent=self, pos=wx.Point(72, 104), size=wx.Size(192, 21),
              style=0, value='')

        self.inparametro = wx.TextCtrl(id=wxID_ALTAPRODUCTOSINPARAMETRO,
              name='inparametro', parent=self, pos=wx.Point(448, 8),
              size=wx.Size(100, 21), style=0, value='')
        self.inparametro.Show(False)
        self.inparametro.Enable(False)

        self.pventa = wx.TextCtrl(id=wxID_ALTAPRODUCTOSPVENTA, name='pventa',
              parent=self, pos=wx.Point(296, 136), size=wx.Size(80, 21),
              style=wx.TE_RIGHT | wx.TE_LEFT, value='0.00')
        self.pventa.SetEditable(False)
        self.pventa.Enable(False)

        self.staticText10 = wx.StaticText(id=wxID_ALTAPRODUCTOSSTATICTEXT10,
              label='Precio Venta Lista 2:', name='staticText10', parent=self,
              pos=wx.Point(400, 136), size=wx.Size(99, 13), style=0)

        self.pventa2 = wx.TextCtrl(id=wxID_ALTAPRODUCTOSPVENTA2,
              name=u'pventa2', parent=self, pos=wx.Point(504, 136),
              size=wx.Size(80, 21), style=wx.TE_RIGHT | wx.TE_LEFT,
              value='0.00')
        self.pventa2.SetEditable(True)
        self.pventa2.Enable(True)

        self.staticLine1 = wx.StaticLine(id=wxID_ALTAPRODUCTOSSTATICLINE1,
              name='staticLine1', parent=self, pos=wx.Point(9, 98),
              size=wx.Size(575, 2), style=0)

        self.incodprovee = wx.TextCtrl(id=wxID_ALTAPRODUCTOSINCODPROVEE,
              name=u'incodprovee', parent=self, pos=wx.Point(134, 8),
              size=wx.Size(100, 21), style=0, value='textCtrl1')
        self.incodprovee.SetEditable(False)
        self.incodprovee.Enable(False)

    def __init__(self, parent,proveedor,codartprov,esalta):
        self._init_ctrls(parent)
        self.CargaGruposCombo()
        if esalta ==1 :
            tablaSQL = "proveedor"
            camposSQL = "nombre,parametro"
            condicion = "idproveedor = "+str(proveedor)
            resultado = consultasBD.executaSQL(self,camposSQL,tablaSQL,condicion)
            for r in resultado:
                nombreprovee = r[0]
                parametro = r[1]
                
            self.innombreprovee.ChangeValue(nombreprovee)
            self.incodprovee.SetValue(proveedor)
            self.inparametro.ChangeValue(parametro)
            
            
            #busco el nuevo idsussan
            tablaSQL = "indices"
            camposSQL = "*"
            condicion = "1"
            resultado = consultasBD.executaSQL(self,camposSQL,tablaSQL,condicion)
            for r in resultado:
                nuevocodsussan = r[0]
            
            self.codsussan.ChangeValue(str(nuevocodsussan))
            
            if not codartprov:
                codartprov = str(nuevocodsussan)
            
            self.incodproducto.ChangeValue(codartprov)            
            
            
        else:
            #arreglar aca
            pass
    
    def grillafactura(self):
        #configuro la grilla de facturacion
        self.grid1.CreateGrid(10,7)      
        columnas =['Codigo','Descripcion','Talle','Grupo','Cantidad','Unitario','Total']
        for i in range(len(columnas)-1,-1,-1): 
            self.grid1.SetColLabelValue(i, columnas[i]) 
        
        
        #fin configuracion grilla facturacion

    def OnIncodigoTextEnter(self, event):
        # hizo un enter y busca el proveedor
        print "aca hizo un enter"
        codprovee = self.incodigoprovee.Value
        tablaSQL = "proveedor"
        camposSQL = "nombre"
        condicion = "idproveedor = %s" % (codprovee)
        resultado = consultaBD.executaSQL(camposSQL,tablaSQL,condicion)
        for r in resultado:
            self.incodigoprovee.ChangeValue(str(r[0]))

    def OnIncodigoproveeTextEnter(self, event):
        event.Skip()

    def OnIncodigoproveeKillFocus(self, event):
        # hizo un enter y busca el proveedor
        print "aca perdio el focus"
        codprovee = self.incodigoprovee.Value
        tablaSQL = "proveedor"
        camposSQL = "nombre"
        condicion = "idproveedor = %s" % (codprovee)
        resultado = consultasBD.executaSQL(self,camposSQL,tablaSQL,condicion)
        for r in resultado:
            self.innombreprovee.ChangeValue(str(r[0]))

    def OnButtonGenerarCodigoNuevo(self, event):
        """cont = 0
        condicionSQL = "codproveedor = %s" % (self.incodproducto.Value)
        resultados = consultasBD.executaSQL(self,"*","proveedor",condicionSQL)
        for r in resultado:
            cont +=1
        
        if cont == 0: #genera un codigo nuevo
            armo = self.incodproducto.Value[:len(self.incodproducto.Value)]
        else: # ya esta cargado ese producto...lo trae
            pass"""

    def CargaGruposCombo(self):
        list = []
        condicionSQL = "1"
        resultados = consultasBD.executaSQL(self,"*","grupos",condicionSQL)
        for r in resultados:
                list.append(""+str(r[0])+" -- "+str(r[1])+"")
        
        self.grupo.SetItems(list)
        return #list
    

    def _guardar_producto(self):
        codartprov = self.incodproducto.Value
        
        codsussan = self.codsussan.Value
        codbarra = "" #no se genera aun
        proveedor = self.incodprovee.Value
        descri = self.descri.Value
        preciolt1 = self.pventa.Value
        preciolt2 = self.pventa2.Value
        preciocompra = self.pcompra.Value
        estacion = self.estacion.Value 
        talle = ""
        anio = self.anio.Value
        color = ""
        grupo = self.grupo.Value
        grupo = grupo.split('--')[0]
        stock = 0
        
##        if not codartprov:
##            codartprov = codsussan

        try:
            consultasBD.begin()        
            sql_producto   = "INSERT INTO productos (codsussan, proveedor, descri, preciolt1, preciolt2, preciocompra, estacion, anio, grupo) VALUES('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')" % (codsussan, proveedor, descri, preciolt1, preciolt2, preciocompra, estacion, anio, grupo)
            sincronizar_tabla.addChange(sql=sql_producto)
            consultasBD.executaSinCommit(None, sql_producto)
            
            sql_codartprov = "INSERT INTO producto_codartprov (codsussan, codartprov) VALUES ('%s', '%s')" % (codsussan, codartprov)
            consultasBD.executaSinCommit(None, sql_codartprov)
            consultasBD.commit()
            utiles.mensaje(self, "El producto se guardo")
        except Exception, e:
            print e.__str__()
            utiles.mensaje(self, "NO se pudo guardar el producto")
            consultasBD.rollback()         
    
    def get_codsussan(self):
        return self.codsussan.Value
        
    def _actualizar_codsussan(self):
        codsussan = self.codsussan.Value
        codsussan = int(codsussan) + 1
        
        sql = "UPDATE indices SET ultimoidcod = %s" % str(codsussan)
        consultasBD.executa(None, sql)

    def OnButtonGuardarArticulo(self, event):
        self._guardar_producto()
        self._actualizar_codsussan()
        
        #msg correcto
        self.Close()

    def OnPcompraKillFocus(self, event):
        #actualiza automaticamente el precio de VENTA
        precio21 = (((float(self.pcompra.Value)) * 21) / 100)
        preciointermedio = precio21 + (float(self.pcompra.Value))
        preciox = ((preciointermedio * float(self.inparametro.Value)) / 100)
        precioventa = preciointermedio + preciox
        
        self.pventa.ChangeValue(str(round(precioventa)))
